Skip to content

Latest commit

 

History

History
29 lines (21 loc) · 840 Bytes

4.14.4 - 错误信息: XXXX client has already been bound to another coroutine.md

File metadata and controls

29 lines (21 loc) · 840 Bytes

错误信息: XXXX client has already been bound to another coroutine

使用协程客户端时出现以下错误信息:

redis client has already been bound to another coroutine.

这表示在两个协程内使用了同一个客户端。请修改PHP代码,避免出现此情况。

错误实例

$redis = new Co\Redis;

go(function () use ($redis) {
	$redis->get("key");
});

go(function () use ($redis) {
	$redis->get("key");
});

例子中两个协程同时使用$redis->get进行IO操作,会引起混乱。底层在第二个协程调用$redis->get时会抛出上述致命错误。

解决方案

使用Swoole\Coroutine\ChannelSplQueue实现连接池,管理协程客户端资源。一个客户端对象仅用于一个协程,操作完毕后,再释放给其他协程使用。